package evemanutool.gui.manu.components;
import java.awt.Dimension;
import java.awt.FlowLayout;
import javax.swing.BorderFactory;
import javax.swing.BoxLayout;
import javax.swing.JLabel;
import javax.swing.JPanel;
import evemanutool.data.database.Blueprint;
import evemanutool.data.database.ManuQuote;
import evemanutool.data.general.Time;
import evemanutool.gui.corp.ProductionPanel;
import evemanutool.gui.general.components.LabelBox;
import evemanutool.gui.general.components.NumberField;
import evemanutool.gui.general.components.NumberLabel;
import evemanutool.gui.manu.frameworks.InspectPanel;
import evemanutool.prefs.Preferences;
import evemanutool.prefs.Preferences.DefaultPriority;
import evemanutool.utils.calc.QuoteCalculator;
import evemanutool.utils.databases.BlueprintDB;
import evemanutool.utils.databases.CorpApiDB;
import evemanutool.utils.databases.PriceDB;
@SuppressWarnings("serial")
public class ManuInspectPanel extends InspectPanel {
//Graphical components.
private NumberField runs;
private NumberField meLevel;
private NumberField peLevel;
private NumberLabel unitsPerRun = new NumberLabel(false, "");
private JLabel manuTime = new JLabel(new Time().toString());
public ManuInspectPanel(Preferences prefs, PriceDB pdb, BlueprintDB bdb, CorpApiDB cdb, ProductionPanel prodPanel) {
super(prefs, pdb, bdb, cdb, prodPanel);
//Top panels.
JPanel bpoPanel = new JPanel();
bpoPanel.setLayout(new BoxLayout(bpoPanel, BoxLayout.Y_AXIS));
bpoPanel.setBorder(BorderFactory.createTitledBorder("Blueprint"));
//Sub panels.
JPanel bpoSubPanel1 = new JPanel(new FlowLayout(FlowLayout.LEADING, 40, 10));
//Create components.
runs = new NumberField(1, false, 0, 100000, 5);
meLevel = new NumberField(0, false, -50, 1000, 3);
peLevel = new NumberField(0, false, -50, 1000, 3);
//Bpo panel.
//First row.
bpoPanel.add(super.getHeaderRow());
//Second row.
runs.setPreferredSize(new Dimension(50, 25));
bpoSubPanel1.add(new LabelBox("Runs", runs, BoxLayout.Y_AXIS));
meLevel.setPreferredSize(new Dimension(50, 25));
bpoSubPanel1.add(new LabelBox("ME", meLevel, BoxLayout.Y_AXIS));
peLevel.setPreferredSize(new Dimension(50, 25));
bpoSubPanel1.add(new LabelBox("PE", peLevel, BoxLayout.Y_AXIS));
bpoSubPanel1.add(new LabelBox("Units/run", unitsPerRun, BoxLayout.Y_AXIS));
bpoSubPanel1.add(new LabelBox("Manufacture Time", manuTime, BoxLayout.Y_AXIS));
bpoPanel.add(bpoSubPanel1);
//Third row.
bpoPanel.add(super.getPriceRow());
//Fourth row.
bpoPanel.add(super.getProfitRow());
//Fifth row.
bpoPanel.add(super.getActionRow());
//Add main panels.
add(bpoPanel);
add(super.getMaterialPanel());
//Set listeners.
assignListener(runs.getDocument());
assignListener(meLevel.getDocument());
assignListener(peLevel.getDocument());
}
@Override
protected ManuQuote initQuote(Blueprint b) {
//Init fields.
runs.setValue(1);
meLevel.setValue(b.getMe());
peLevel.setValue(b.getPe());
return QuoteCalculator.calculateQuote(modBpo, 1, null, pdb, bdb, prefs,
MAT_ACQUIRE_PRIO_ENUM[prefs.getDefaultPriorityIndex(DefaultPriority.MAT_CALC)]);
}
@Override
protected ManuQuote makeQuote(ManuQuote currentQuote) {
//Create Quote from fields.
if (modBpo != null && runs.isValidInput() && meLevel.isValidInput() && peLevel.isValidInput()) {
modBpo.setMe((int) meLevel.getValue());
modBpo.setPe((int) peLevel.getValue());
return QuoteCalculator.calculateQuote(modBpo, (int) runs.getValue(), currentQuote, pdb, bdb, prefs,
MAT_ACQUIRE_PRIO_ENUM[prefs.getDefaultPriorityIndex(DefaultPriority.MAT_CALC)]);
}
return null;
}
@Override
protected void updateFields(ManuQuote q) {
//Update subclass-specific fields and labels.
unitsPerRun.setValue(q.getBpo().getItemsPerRun());
manuTime.setText(q.getManuTime().toString());
}
}